বড় JSON ফাইল নিয়ে কাজ করার সময় মেমোরি ব্যবস্থাপনা, পারফরম্যান্স এবং স্কেলেবিলিটি গুরুত্বপূর্ণ হয়ে ওঠে। Jackson Streaming API বড় JSON ডেটা প্রসেস করার জন্য একটি দক্ষ এবং মেমোরি-সাশ্রয়ী পদ্ধতি সরবরাহ করে। এটি পুরো JSON ডেটা মেমোরিতে লোড না করে event-driven parsing এর মাধ্যমে কাজ করে, যা বিশেষত বড় ডেটাসেটের ক্ষেত্রে কার্যকর।
Streaming API কিভাবে কাজ করে?
Jackson এর Streaming API মূলত দুইটি গুরুত্বপূর্ণ ইন্টারফেস ব্যবহার করে:
- JsonParser: JSON ডেটা read করতে ব্যবহৃত হয়।
- JsonGenerator: JSON ডেটা write করতে ব্যবহৃত হয়।
Streaming API এর বৈশিষ্ট্য
- Low Memory Consumption: ডেটা একটি ইভেন্ট হিসাবে প্রসেস করা হয়, ফলে বড় JSON ফাইল লোড করার প্রয়োজন হয় না।
- High Performance: মেমোরি কম ব্যবহার করে দ্রুত ডেটা প্রসেস করতে সক্ষম।
- Fine-Grained Control: JSON ডেটার প্রতিটি ইভেন্ট (যেমন, START_OBJECT, FIELD_NAME, VALUE_STRING) আলাদাভাবে হ্যান্ডল করা যায়।
- Forward-Only Parsing: ডেটা একবার প্রসেস করলে পুনরায় ব্যাক করা সম্ভব নয়।
উদাহরণ: Large JSON Read করার জন্য JsonParser
নিচের উদাহরণটি একটি বড় JSON ফাইল থেকে নির্দিষ্ট ডেটা প্রসেস করার পদ্ধতি দেখায়:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import java.io.File;
import java.io.IOException;
public class StreamingApiExample {
public static void main(String[] args) {
try {
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(new File("large_file.json"));
while (!parser.isClosed()) {
JsonToken token = parser.nextToken();
if (token == JsonToken.FIELD_NAME && "name".equals(parser.getCurrentName())) {
parser.nextToken(); // Move to the value
String name = parser.getValueAsString();
System.out.println("Name: " + name);
}
}
parser.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোডের ব্যাখ্যা:
- JsonFactory: একটি JSON parser তৈরি করে।
- JsonParser: ফাইলটি streaming mode-এ প্রসেস করে।
- JsonToken: JSON ডেটার প্রতিটি টোকেন (যেমন START_OBJECT, END_OBJECT, FIELD_NAME) সনাক্ত করে।
- Conditional Processing: নির্দিষ্ট ফিল্ড (যেমন "name") খুঁজে তার মান প্রসেস করা হয়।
উদাহরণ: Large JSON Write করার জন্য JsonGenerator
নিচের উদাহরণটি একটি বড় JSON ফাইল তৈরি বা লেখার পদ্ধতি দেখায়:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import java.io.File;
import java.io.IOException;
public class StreamingApiWriteExample {
public static void main(String[] args) {
try {
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(new File("output.json"));
generator.writeStartObject(); // Start JSON Object
generator.writeStringField("name", "Jackson");
generator.writeNumberField("age", 30);
generator.writeArrayFieldStart("skills");
generator.writeString("Java");
generator.writeString("JSON");
generator.writeEndArray(); // End array
generator.writeEndObject(); // End JSON Object
generator.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোডের ব্যাখ্যা:
- JsonGenerator: JSON ডেটা স্ট্রিম হিসাবে লেখার জন্য ব্যবহৃত।
- writeStartObject/writeEndObject: JSON অবজেক্টের শুরু এবং শেষ নির্ধারণ করে।
- writeArrayFieldStart/writeEndArray: JSON অ্যারে লেখার জন্য ব্যবহৃত।
কেন Streaming API ব্যবহার করবেন?
- বড় JSON ফাইল:
- যদি JSON ডেটা কয়েক GB বা তার বেশি হয়, এটি পুরোপুরি মেমোরিতে লোড করলে
OutOfMemoryErrorহতে পারে। Streaming API মেমোরি-সাশ্রয়ী সমাধান দেয়।
- যদি JSON ডেটা কয়েক GB বা তার বেশি হয়, এটি পুরোপুরি মেমোরিতে লোড করলে
- রিয়েল-টাইম প্রসেসিং:
- স্ট্রিমিং অ্যাপ্লিকেশন বা log processing-এর ক্ষেত্রে ডেটা ধীরে ধীরে প্রসেস করা হয়।
- পারফরম্যান্স:
- প্রচলিত ObjectMapper পদ্ধতির চেয়ে এটি দ্রুত, কারণ এটি ডেটাকে সরাসরি স্ট্রিম করে প্রসেস করে।
Streaming API বনাম ObjectMapper
| বৈশিষ্ট্য | Streaming API | ObjectMapper |
|---|---|---|
| মেমোরি ব্যবস্থাপনা | কম মেমোরি ব্যবহার করে। | পুরো ডেটা মেমোরিতে লোড করে। |
| পারফরম্যান্স | দ্রুত এবং স্কেলেবল। | ছোট JSON ফাইলের জন্য কার্যকর। |
| কাস্টমাইজেশন | বিস্তারিত এবং নিয়ন্ত্রণযোগ্য। | সহজ এবং ডিফল্ট কনফিগারেশন। |
| ইউজার-ফ্রেন্ডলি | ব্যবহার জটিল। | ব্যবহার সহজ। |
Streaming API ব্যবহার করার উপযোগিতা
- বড় JSON ফাইল: কম মেমোরি ব্যবহার করে দ্রুত প্রসেস করা।
- ডেটা ফিল্টারিং: পুরো JSON না পড়ে নির্দিষ্ট ফিল্ড পড়া বা লেখার সুবিধা।
- স্ট্রিম ডেটা প্রসেসিং: লাইভ ডেটা প্রসেস করার জন্য উপযুক্ত।
Jackson এর Streaming API বড় JSON ফাইল বা লাইভ ডেটা প্রসেস করার জন্য একটি চমৎকার সমাধান। এটি মেমোরি সাশ্রয়ী এবং উচ্চ পারফরম্যান্স নিশ্চিত করে।
Read more